package TankWar;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import java.util.ArrayList;


public class TankClient extends Frame{
    public static final int GAME_WIDTH=800;
    public static final int GAME_HEIGHT=600;

    Tank myTank=new Tank(700,500,true,Direction.STOP,this);
    //Tank enemyTank=new Tank(100,100,false,this);

    Wall w1 =new Wall(400,200,20,300,this),w2=new Wall(500,300,300,20,this);

    //Explode e=new Explode(70,80,this);
    List<Explode> explodes =new ArrayList<Explode>();
    List<Missile> missiles =new ArrayList <Missile> ();
    List<Tank> tanks =new ArrayList <Tank> ();



    Image offScreenImage=null;



    public void lauchFrame(){

        for (int i=0;i<10;i++){
            tanks.add(new Tank(100+40*i+1,100,false,Direction.D,this));
        }

        this.setLocation(300,100);
        this.setSize(GAME_WIDTH,GAME_HEIGHT);
        this.setTitle("TankWar");
        this.setResizable(false);
        this.setBackground(Color.GRAY);
        setVisible(true);
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(0);
                //super.windowClosing(e);
            }
        });

        this.addKeyListener(new KeyMonitor());
        new Thread(new PaintThread()).start();
    }


    Blood b=new Blood();


    public void paint(Graphics g) {
        g.drawString("子弹个数："+missiles.size(),10,50);
        g.drawString("击中个数："+explodes.size(),10,70);
        g.drawString("坦克数量："+tanks.size(),10,90);
        g.drawString("生命值："+myTank.getLife(),10,110);
        if(tanks.size()<=0){
            for (int i=0;i<10;i++){
                tanks.add(new Tank(100+40*i+1,100,false,Direction.D,this));
            }
        }

        for(int i=0;i<missiles.size();i++){
            Missile m=missiles.get(i);
            m.hitTanks(tanks);
            m.hitTank(myTank);
            m.hitWall(w1);
            m.hitWall(w2);
            //m.hitTank(enemyTank);
            m.draw(g);
        }
        for(int i=0;i<explodes.size();i++){
            Explode e=explodes.get(i);
            e.draw(g);
        }

        for(int i=0;i<tanks.size();i++){
            Tank t=tanks.get(i);
            t.collidesWithWall(w1);
            t.collidesWithWall(w2);
            t.collidesWithTanks(tanks);
            t.draw(g);
        }

        myTank.draw(g);
        //enemyTank.draw(g);
        myTank.eat(b);
        w1.draw(g);
        w2.draw(g);
        b.draw(g);

    }



    public void update(Graphics g) {
        if(offScreenImage==null){
            offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);
        }
        Graphics gOffScreen=offScreenImage.getGraphics();
        Color c=gOffScreen.getColor();
        gOffScreen.setColor(Color.GRAY);
        gOffScreen.fillRect(0, 0, GAME_WIDTH,GAME_HEIGHT);
        gOffScreen.setColor(c);
        paint(gOffScreen);
        g.drawImage(offScreenImage,0, 0,null);
    }


    public static void main(String[] args) {
        TankClient tc=new TankClient();
        tc.lauchFrame();
    }

    private class PaintThread implements Runnable{

        public void run() {
            while(true){
                repaint();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }


    }


    private class KeyMonitor extends KeyAdapter{

        public void keyReleased(KeyEvent e) {
            myTank.KeyReleased(e);
        }

        @Override
        public void keyPressed(KeyEvent e) {
            myTank.keyPressed(e);
        }
    }
}

